package com.qf.factory;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

/**
 * 工厂模式
 *  1. 加载属性文件
 *  2. 通过反射创建 bean 对象
 *  3. 创建所有的对象，并存储起来，需要使用时 直接获取
 *
 * @author 千锋教育
 * @Company http://www.mobiletrain.org/
 * @Version 1.0
 */
public class BeanFactory {

    private static Map<String,Object> map = new HashMap<>();

    static {
        Properties prop = new Properties();
        //读取 属性文件
        InputStream inputStream = BeanFactory.class.getResourceAsStream("/bean.properties");
        try {
            //加载属性文件，存储到properties
            prop.load(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //获取到所有的 key
        Set<Object> keySet = prop.keySet();
        //循环key
        //key: userService
        //value: com.qf.service.impl.UserServiceImpl
        for (Object key : keySet) {
            String value = (String) prop.get(key);
            try {
                //通过反射 创建  对象
                Class clazz = Class.forName(value);
                Object obj = clazz.newInstance();

                map.put((String)key , obj);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }


    public static Object getBean(String key){
        return map.get(key);
    }
}
